﻿using Microsoft.Data.OData.Query.SyntacticAst;
using System;
namespace Microsoft.Data.OData.Query
{
    /// <summary>
    /// Interface for the SelectExpandTermParsing strategy
    /// </summary>
    internal interface ISelectExpandTermParser
    {
        /// <summary>
        /// Parses a full $select expression.
        /// </summary>
        /// <returns>The lexical token representing the select.</returns>
        SelectToken ParseSelect();
        /// <summary>
        /// Parses a full $expand expression.
        /// </summary>
        /// <returns>The lexical token representing the select.</returns>
        ExpandToken ParseExpand();
        /// <summary>
        /// Parses a single term in a comma seperated list of things to select.
        /// </summary>
        /// <param name="isInnerTerm">is this an inner or outer select term</param>
        /// <returns>A token representing thing to select.</returns>
        PathSegmentToken ParseSingleSelectTerm(bool isInnerTerm);
        /// <summary>
        /// Parses a single term in a comma seperated list of things to expand.
        /// </summary>
        /// <param name="isInnerTerm">is this an inner or outer term.</param>
        /// <returns>A token representing thing to expand.</returns>
        ExpandTermToken ParseSingleExpandTerm(bool isInnerTerm);
    }
}
